package io.github.echarts.coordinator;

import io.github.echarts.model.component.Component;
import io.github.echarts.render.GraphicsRenderer;

import java.awt.Font;
import java.util.ArrayList;
import java.util.List;

/**
 * 组件渲染协调器
 * 负责协调各类图表组件的渲染过程
 */
public class ComponentRenderingCoordinator {
    
    /** 组件列表 */
    private List<Component> components;
    
    /** 渲染上下文 */
    private RenderContext renderContext;
    
    /**
     * 构造函数
     */
    public ComponentRenderingCoordinator() {
        components = new ArrayList<>();
    }
    
    /**
     * 设置渲染上下文
     * 
     * @param renderContext 渲染上下文
     */
    public void setRenderContext(RenderContext renderContext) {
        this.renderContext = renderContext;
    }
    
    /**
     * 添加组件
     * 
     * @param component 组件
     */
    public void addComponent(Component component) {
        components.add(component);
    }
    
    /**
     * 批量添加组件
     * 
     * @param components 组件列表
     */
    public void addComponents(List<Component> components) {
        if (components != null) {
            this.components.addAll(components);
        }
    }
    
    /**
     * 渲染所有组件
     * 
     * @param renderer 图形渲染器
     */
    public void renderComponents(GraphicsRenderer renderer) {
        // 设置当前层为组件层
        renderer.setCurrentLayer("component");
        
        // 渲染所有组件
        for (Component component : components) {
            renderComponent(component, renderer);
        }
    }
    
    /**
     * 渲染单个组件
     * 
     * @param component 组件
     * @param renderer 图形渲染器
     */
    private void renderComponent(Component component, GraphicsRenderer renderer) {
        String type = component.getType().name();
        switch (type) {
            case "TITLE":
                renderTitleComponent(component, renderer);
                break;
            case "LEGEND":
                renderLegendComponent(component, renderer);
                break;
            case "TOOLTIP":
                // 工具提示不在静态渲染阶段渲染
                break;
            default:
                // 默认不渲染
                break;
        }
    }
    
    /**
     * 渲染标题组件
     * 
     * @param component 标题组件
     * @param renderer 图形渲染器
     */
    private void renderTitleComponent(Component component, GraphicsRenderer renderer) {
        // 获取标题文本、位置、样式等信息
        // 使用逻辑坐标系渲染（左下角为原点，y轴向上）
        
        // 示例实现，实际应从component中获取相关属性
        String title = component.getId();
        if (title == null) {
            title = "图表标题";
        }
        
        int x = 50;  // 左边距
        int y = renderContext.getHeight() - 50;  // 距离顶部50像素
        
        // 渲染标题文本
        Font font = new Font("Arial", Font.BOLD, 16);
        renderer.drawText(title, x, y, font, "#333333", "left");
    }
    
    /**
     * 渲染图例组件
     * 
     * @param component 图例组件
     * @param renderer 图形渲染器
     */
    private void renderLegendComponent(Component component, GraphicsRenderer renderer) {
        // 获取图例项、位置、样式等信息
        // 使用逻辑坐标系渲染（左下角为原点，y轴向上）
        
        // 示例实现
        int x = renderContext.getWidth() - 150;  // 距离右侧150像素
        int y = renderContext.getHeight() - 50;  // 距离顶部50像素
        
        // 渲染图例项
        renderer.drawRect(x, y - 10, 10, 10, true, "#FF0000", "#000000");
        renderer.drawText("系列1", x + 15, y, null, "#333333", "left");
        
        renderer.drawRect(x, y - 30, 10, 10, true, "#00FF00", "#000000");
        renderer.drawText("系列2", x + 15, y - 20, null, "#333333", "left");
    }
} 